/*
 * Copyright (c) 2015 smarthome.com All rights reserved. 本软件源代码版权归----所有,未经许可不得任意复制与传播.
 */
package com.smarthome.base.dao.base;

import java.io.Serializable;
import java.util.List;

/**
 * dao基类<实体,主键>
 * @author KongXiangyu
 * @since 2015-08-05
 * @param <T> 实体
 * @param <KEY> 主键
 */
public interface BaseDao<T, KEY extends Serializable> {

    /**
     * 添加对象
     * @param t
     * @return 影响条数
     */
    @SuppressWarnings("unchecked")
    int insertEntry(T... t);

    /**
     * 得到最新的id
     * @return 返回主键id
     */
    long lastSequence();

    /**
     * 删除对象,主键
     * @param key
     * @return 影响条数
     */
    @SuppressWarnings("unchecked")
    int deleteByKey(KEY... id);

    /**
     * 删除对象,条件
     * @param condtion
     * @return 影响条数
     */
    int deleteByKey(T condtion);

    /**
     * 更新对象,条件主键ID
     * @param t
     * @return 影响条数
     */
    int updateByKey(T t);

    /**
     * 查询对象,条件主键
     * @param key
     * @return
     */
    T selectEntry(KEY id);

    /**
     * 查询对象,条件主键数组
     * @param key
     * @return
     */
    List<T> selectEntryList(KEY... ids);

    /**
     * 查询对象,只要不为NULL与空则为条件
     * @param t
     * @return
     */
    List<T> selectEntryList(T t);

    /**
     * 查询对象总数
     * @param t
     * @return
     */
    Integer selectEntryListCount(T t);
}
